#include<iostream>
#include <unistd.h>
#include<signal.h>
using namespace std;

// void printNum()
// {
//     for(int i=0;i<10;i++)
//     {
//         for(int j=0;j<i;j++)
//         {
//             printf("%d ",j);
//         }
//         printf("\n");
//     }
// }
sigset_t set,set2,oset;

int t = 0;
void showOset(sigset_t* oset)
{
    for(int i=1;i<=31;i++)
    {
        if(sigismember(oset,i)==1)
            printf("1");
        else
            printf("0");
    }

    cout<<" pid:"<<getpid()<<endl;
}
// void handler(int signo)
// {
//     //printNum();
//     //cout<<"好的好的，我知道了，小样儿被我抓到了吧\n";
//     cout<<"我收到了信号，我现在需要恢复\n";
//     //sigprocmask(SIG_SETMASK,&oset,&set);
//     sigpending(&set2);
//     showOset(&set2);
//     t=1;
    
// }




int main()
{
    // signal(SIGALRM,handler);
    // alarm(10);
    sigemptyset(&set2);
   // sigemptyset(&oset);
    // for(int i=2;i<8;i++)
    // {
    //     sigaddset(&set,i);
    // }
    for(int i=2;i<=10;i++)
    {
        sigaddset(&set2,i);
    }
    sigprocmask(SIG_BLOCK,&set2,nullptr);
    showOset(&set2);
    // showOset(&oset);
    // sigprocmask(SIG_BLOCK,&set,&oset);
    // showOset(&set);
    // showOset(&oset);
    while(1)
    {
        sigpending(&set2);
        showOset(&set2);
        sleep(1);
    }
    sleep(15);


    // while(1)
    // {
    //     // if(t==0)
    //     //     showOset(&set2);
    //     // else
    //         showOset(&oset);

    //     sleep(1);

    // }
    //signal(2,SIG_IGN);
    //signal(SIGALRM,handler);
    // int count=0;
    // // int*p=nullptr;
    // // *p=8;
    // // cout<<*p<<"\n";
    // while(1)
    // {
    //     cout<<++count<<"我很好，勿忧！   我的pid:"<<getpid()<<endl;
    //     //sleep(10);
    //     // sleep(1);
    //     // raise(2);
    //     sleep(1);
    //     alarm(2);
    // }

    return 0;
}